#include"TCP.h"
int flag = 1; // 用来控制 进程是否退出

// 声明读写线程函数
void *pthread_read(void *sock);
void *pthread_write(void *sock);

int main(int argc, char const *argv[])
{
    //判定输入格式是否正确
    if (3!=argc)
    {
        printf("格式错误: 端口号 IP地址\n");
        exit(-1);
    }

    // 建立连接
    int sock_fd = TCP_Init_Client(atoi(argv[1]),argv[2]);
    printf(" =================== 开启聊天 =================== \n");

    //创建线程
    pthread_t Tid[2];
    pthread_create(&Tid[0], NULL, pthread_read,(void *)&sock_fd);//读进程
    pthread_create(&Tid[1], NULL, pthread_write, (void *)&sock_fd);//写进程

    // 关闭线程
    pthread_join(Tid[0],NULL);
    pthread_join(Tid[1], NULL);

    // 关闭连接
    TCP_close(NULL,&sock_fd);
    return 0;
}


//读取线程
void *pthread_read(void *sock)
{
    int sock_read = *((int *)sock);
    char buf[128]; // 用户读取/写入数据
    while (flag)
    {
        //接收数据
        memset(buf,0,sizeof(buf));
        read(sock_read,buf,sizeof(buf));

        //安全判断
        if (0==strlen(buf))
        {
            continue;
        }

        // 显示数据
        printf("服务器:%s\n",buf);

        //判断是否退出
        if (!strcmp(buf,"quit"))
        {
            flag = 0;
            printf("退出成功!\n");
            exit(1);
        }
    }
    return NULL;
}

//写入线程
void *pthread_write(void *sock)
{
    int sock_write = *((int *)sock);
    char buf[128]; // 用户读取/写入数据
    while (flag)
    {
        memset(buf, 0, sizeof(buf));
        printf("客户端:");
        scanf("%s", buf);
        // fgets(buf, sizeof(buf), stdin);
        write(sock_write, buf, strlen(buf));//发送消息
        if (!strcmp(buf,"quit"))
        {
            printf("退出成功!\n");
            flag = 0;
            exit(1);
        } 
    }
    return NULL;
}